<?xml version="1.0" encoding="UTF-8"?>
<!--
Plantilla xsl de transforamcion de foramto de metainformacion propietario del repositorio Flickr al formato universal manejado en el sistema DUMA (basado en Mpeg7)
Esta plantilla realiza peticiones REST concurrentes contra otras direcciones para obtener los detalles de cada elemento obtneido en la busqueda.
Esta funcion ha sido implementada como extension del procesador xsl. Para utilizarla hay que declarar el espacio de nombres xmlns:duma="java:es.duma.util.xsl.XSLfunctions"
Y el modo de uso es duma:requestRESTConcurrenteList2($baseUrl,photos/photo/@id) siendo el segundo parametro un xsl:sequence (lista de elementos)
-->
<xsl:stylesheet version="2.0" xmlns="urn:mpeg:mpeg7:schema:2001" xmlns:Mpeg7="urn:mpeg:mpeg7:schema:2001" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:saxon="http://saxon.sf.net/" xmlns:duma="java:es.duma.util.xsl.XSLfunctions" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:voc="vocabularies" xmlns:list="java:java.util.ArrayList" exclude-result-prefixes="xs xsl xsi saxon duma list">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
	<xsl:template match="/rsp">
		<Mpeg7>
			<Description xsi:type="Mpeg7:ContentEntityType">
				<MultimediaContent xsi:type="Mpeg7:MultimediaCollectionType">
					<Collection xsi:type="Mpeg7:ContentCollectionType" name="DUMA">
						<ContentCollection name="flickr">
                                                                                            
                                                        <!-- Direccion base de las peticiones concurrentes -->
                                                        <xsl:variable name="baseUrl">http://api.flickr.com/services/rest/?api_key=841d5f93401d202ebcbcb9c839f24b75&amp;method=flickr.photos.getInfo&amp;photo_id=</xsl:variable>
                                                
                                                       <!--Para cada respuesta obtenida de las peticiones REST concurrente se procesan sus resultados 
                                                       para completar los metadatos de cada una de las imagenes que se obtenieron en la busqueda -->
                                                        <xsl:for-each select="duma:requestRESTConcurrenteList2($baseUrl,photos/photo/@id)">
                                                                <xsl:variable name="actual"><xsl:value-of select="."/></xsl:variable>                                                        
                                                                <xsl:apply-templates select="saxon:parse($actual)" mode="flickr-photo"/>
                                                        </xsl:for-each>
                      
                                                                   
                                                        
						</ContentCollection>
					</Collection>
				</MultimediaContent>
			</Description>
		</Mpeg7>
	</xsl:template>


        <!-- ////////////////////////////////////////////////////////////////////////////
         Plantilla para procesar cada contenido de flickr (cada resultado de los obtenidos en las peticiones REST)
        ///////////////////////////////////////////////////////////////////////////////////-->
	<xsl:template match="/rsp" mode="flickr-photo">
                <Content xsi:type="Mpeg7:ImageType"><xsl:attribute name="id" select="photo/@id"/>
			<AudioVisual>
				<MediaInformation>
                                    <xsl:apply-templates select="photo" mode="getInstances"/>
                                </MediaInformation>
				<CreationInformation>
					<Creation>
						<Title>
							<xsl:value-of select="photo/title"/>
						</Title>
						<TitleMedia>
							<TitleImage>
								<MediaUri>
									<!--Construir direccion de la imagene miniatura -->
                                                                        <xsl:text>http://farm</xsl:text><xsl:value-of select="photo/@farm"/><xsl:text>.static.flickr.com/</xsl:text><xsl:value-of select="photo/@server"/>/<xsl:value-of select="photo/@id"/>_<xsl:value-of select="photo/@secret"/><xsl:text>_t.jpg</xsl:text>
								</MediaUri>
							</TitleImage>
						</TitleMedia>
						<Abstract>
							<FreeTextAnnotation>
								<xsl:value-of select="photo/description"/>
							</FreeTextAnnotation>
							<KeywordAnnotation>
                                                                    <!--Plantilla para obtener las palabras clave -->
                                                                    <xsl:apply-templates select="photo/tags" mode="flickr-photo"/>
							</KeywordAnnotation>
						</Abstract>
						<Creator>
							<Role href="RoleVocabulary">
								<voc:Name>Propietario</voc:Name>
							</Role>
							<Agent xsi:type="Mpeg7:OrganizationType">
								<voc:Name>
                                                                    <xsl:value-of select="photo/owner/@username"/>
								</voc:Name>
								<ElectronicAddress>
									<Email>
										
									</Email>
								</ElectronicAddress>
							</Agent>
                                                        <Instrument>
                                                            <Tool>
								<voc:Name>Flickr</voc:Name>
                                                                <voc:Definition>flickr.gif</voc:Definition>
                                                            </Tool>
							</Instrument>
						</Creator>
                                                <CreationCoordinates>
                                                    <Location></Location>
                                                    <!--Fecha en el formato dd/mm/aaaaThh:mm:ss -->
                                                    <xsl:variable name="datePhoto" select="photo/dates/@taken"/>
                                                    <Date><TimePoint>
                                                        <xsl:call-template name="formatDate"><xsl:with-param name="date" select="$datePhoto"/></xsl:call-template>
                                                    </TimePoint></Date>
						</CreationCoordinates>
					</Creation>
                                        <!--Clasificacion. Genero y Rating -->
                                        <Classification>
                                            <Genre href="urn:mpeg:cat">
						<voc:Name></voc:Name>
                                            </Genre>
                                            <MediaReview>
                                                <Rating>
                                                    <!--Se fija valor por defecto ya que Flickr no tiene datos referentes al rating -->
                                                    <RatingValue></RatingValue>
                                                    <RatingScheme best="5.0" style="higherBetter">
                                                        <voc:Name>Rating</voc:Name>
                                                        <voc:Definition>Duma</voc:Definition>
                                                    </RatingScheme>
                                                </Rating>
                                            </MediaReview>
                                        </Classification>
				</CreationInformation>
			</AudioVisual>
		</Content>
	</xsl:template>
        
        <!-- ////////////////////////////////////////////////////////////////////////////
         Plantilla para procesar cada palabra clave de un contenido flickr
        ///////////////////////////////////////////////////////////////////////////////////-->
	<xsl:template match="tags" mode="flickr-photo">
            <xsl:for-each select="tag">
                <Keyword>
                    <xsl:value-of select="."/>
                </Keyword>
            </xsl:for-each>
        </xsl:template>
        
        <!-- ////////////////////////////////////////////////////////////////////////////
         Plantilla para procesar cada instancia disponible de una imagen
        ///////////////////////////////////////////////////////////////////////////////////-->
	<xsl:template match="photo" mode="getInstances">
            <xsl:variable name="base_img_url"><xsl:text>http://farm</xsl:text><xsl:value-of select="@farm"/><xsl:text>.static.flickr.com/</xsl:text><xsl:value-of select="@server"/>/<xsl:value-of select="@id"/>_<xsl:value-of select="@secret"/></xsl:variable>
            <MediaProfile>
                <MediaInstance>
                    <InstanceIdentifier>
                        <!--Construir direccion de la imagen mediana -->
                        <xsl:value-of select="$base_img_url"/><xsl:text>_m.jpg</xsl:text>
                    </InstanceIdentifier>
                    
                    <LocationDescription>img/medium</LocationDescription>
                    
		</MediaInstance>
            </MediaProfile>
            <!-- Imagen mediana2 -->
            <MediaProfile>
                <MediaInstance>
                    <InstanceIdentifier>
                        <!--Construir direccion de la imagen grande. Solo existe para algunos casos -->
                        <xsl:value-of select="$base_img_url"/><xsl:text>.jpg</xsl:text>
                    </InstanceIdentifier>
                    
                    <LocationDescription>img/big</LocationDescription>
                    
		</MediaInstance>
            </MediaProfile>
            
            <!-- Imagen grande -->
            <MediaProfile>
                <MediaInstance>
                    <InstanceIdentifier>
                        <!--Construir direccion de la imagen grande. Solo existe para algunos casos -->
                        <xsl:value-of select="$base_img_url"/><xsl:text>_b.jpg</xsl:text>
                    </InstanceIdentifier>
                    
                    <LocationDescription>img/extrabig</LocationDescription>
                    
		</MediaInstance>
            </MediaProfile>
        
        
            <!-- Imagen original -->
            <MediaProfile>
                <MediaInstance>
                    <InstanceIdentifier>
                        <!--Construir direccion de la imagen original.-->
                        <xsl:value-of select="$base_img_url"/><xsl:text>_o.jpg</xsl:text>
                    </InstanceIdentifier>
                    <LocationDescription>img/original</LocationDescription>
                        
                </MediaInstance>
            </MediaProfile>
            </xsl:template>
        
        
          <!--Transforma el formato de fecha definido en flickr en el formato utilizado internamente por el sistema en Mpeg7-->
        <xsl:template name="formatDate">
            <xsl:param name="date"/>
            
            <xsl:variable name="dia" select="substring($date,9,2)"/>
            <xsl:variable name="mes" select="substring($date,6,2)"/>
            <xsl:variable name="anyo" select="substring($date,1,4)"/>
            
            <xsl:value-of select="$dia"/>/<xsl:value-of select="$mes"/>/<xsl:value-of select="$anyo"/>
            
        </xsl:template>
        
        
</xsl:stylesheet>